#ifndef LAVAGEM_H_
#define LAVAGEM_H_

//Include
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "LCD16x2.h"
#include "interrupcao.h"
#include <stdio.h>
#include "flash.h"
#include "delay.h"

//-------------------------------------------------------------

//Define
#define	AGUA_ON GPIO_SetBits(GPIOB, GPIO_Pin_10);
#define AGUA_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_10);
#define	BOMBA_ON GPIO_SetBits(GPIOB, GPIO_Pin_13);
#define BOMBA_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_13);
#define	DRENO_ON GPIO_SetBits(GPIOB, GPIO_Pin_12);
#define DRENO_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_12);
#define	DET_ON GPIO_SetBits(GPIOB, GPIO_Pin_14);
#define DET_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_14);
#define	RES_ON GPIO_SetBits(GPIOB, GPIO_Pin_11);
#define RES_OFF GPIO_ResetBits(GPIOB, GPIO_Pin_11);
#define	LED_ENXAGUE_ON GPIO_SetBits(GPIOA, GPIO_Pin_11);
#define LED_ENXAGUE_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_11);
#define	LED_COMPLETA_ON GPIO_SetBits(GPIOA, GPIO_Pin_10);
#define LED_COMPLETA_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_10);
#define BT_Volta_Int GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)
#define BT_ENXAGUE GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8)
#define BT_INICIO GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9)


#define debounce for(k = 0; k<0xFFFF; k++);
//-------------------------------------------------------------

//Ordem
enum LAVAGEM{
	INICIO,
	ETAPA1,
	ETAPA2,
	ETAPA3,
	ETAPA4,
	ETAPA5,
	ETAPA6,
	ETAPA7,
	ETAPA8,
	FINAL,
	modo,
	enx,
	comp,
	sucesso,
	menu
};

enum Status{
	sel_lav_comp,
	sel_enxague,
	lav_comp,
	enxague,
	interrupcao,
	press_bt
};

enum PROCESS{
	O_ENXAGUE,
	O_COMPLETA,
	O_NENHUM,
	O_TESTE,
	O_APRE,
	O_ENXAGUE_APRE,
	O_COMPLETA_APRE
};

enum MENU{
	nenhum,
	cancela,
	confirma
};

enum SENHA{
	pos1,
	pos2,
	pos3,
	pos4,
	pos_fim,
	pos_certo
};

enum teste_Senha{
	zero,
	outro
};
struct bkp{
	int agua;
	int bomba;
	int dreno;
	int det;
	int res;
	int led_enxague;
	int led_completa;
	int processo;
};
//-------------------------------------------------------------

//Funcoes
void init_lavagem();
void ENXAGUE();
void COMPLETA();
void delay_seg(unsigned int temp);
void init_tempos();
void program_teste();
void program_modelo();
int retorna_estado();
int retorna_process();
void set_process(int setProcess);
void set_estado(int setEstado);
//-------------------------------------------------------------

#endif /* LAVAGEM_H_ */
